kubernetes 1.25.4 在 Anolis 8 RHEL 的集群部署指引
由于这个页面的内容是从 Jimmy 的语雀的笔记 迁移过来的,所以格式会存在一些问题。 因为大部分内容都可以正常阅读,我会在有空的时候将文章格式修正。
虽然写这篇文章的时候 K8S 1.25 才刚刚发布,但你看到这篇文章的时候可能版本已经过时了。Jimmy 仍然在对 K8S 的部署以及使用做更深入的研究,但受限于时间和设备资源问题暂时没有公开关于 K8S 更多的文章。
这个教程主要在龙蜥 Anolis 系统上部署 k8s 集群,与 Dashboard,参考多方大佬文章经过数天若干次试验成功部署。经过实验本文也适应于 CentOS 8 任意版本。
[@Jimmy Kmi(jimmy-2ueqc)** Jimmy 版权所有 转发时请署名作者(文档界的 Apache 2.0)]**
前言
如果你不清楚 k8s 是做什么的,技术源是什么公司的,那么此文大概率不会对您有任何帮助。
为什么研究 k8s
本人是学大数据专业的,常用到的 spark、hadoop 也是需要集群运行,但是用于生产环境的时候无论是服务器资费还是效率都令人头秃,在网上考证是可以通过 k8s 承载 hadoop 集群,并且部署 spark,所以就有了这篇教程。后面需要调用 Q# 运行量子运算时也希望能够有办法通过 k8s 进行集群调度(已经写入计划但未提上日程)。
为什么选择新版
由于 k8s 在 1.25 版本对 docker 的支持方式有较大变化,所以提前把未来部分坑踩了。目前最新版是 1.25.4,按照旧版保无 bug 的情况下不建议在生产环境使用。但本人对新技术比较激进,目前就是为了部署在个人网站的生产环境。但是云效平台暂时只支持到 build 1.23,所以后面整理完会更新 1.23 的教程。
阿里云
阿里云有现成的,入门成本太高,要求基础配置过高、k8s 部署另外收取服务费。但本试验因为需要对系统重装、备份无数次,所以阿里云 ECS 能为我节约不少时间,我也花了不少钱在 ECS 上进行测试。 参考过大部分的部署方法,坑点都比较集中,这篇文章在于通过试验解决不少坑点。
国内网络
中国大陆的网络无法访问谷歌,但k8s的大多源都是谷歌,githubraw的网址也经常被污染,所以k8s的源已大部分使用阿里云源,githubraw如果遇到失败请修改host或重试。
基本要求
注意,本文会忽略以下内容:
- HOST,这东西实在是太不优雅,进行任何修改需要所有节点同步,解决方案是私有 DNS域,本文使用 k8s.zone,这方面介绍会在以后补充,这里不作过多赘述。
- IP,这东西也非常不优雅,IP 地址在路由端固定。与 DNS 可以同域控。
- 防火墙,单服务器配置不优雅,统一在路由端做防火墙。
配置
Anolis OS 8 RHCL 2核心 4G内存 (main) Anolis OS 8 RHCL 2核心 2G内存 (node) * n
版本
kubernetes 1.25.4 (1.25.x 通用)
Dashboard 2.6.1
Golang 1.18.8
runc 1.1.4
libeseccomp 2.5.2
ctr 1.6.10
registry.k8s.io/kube-apiserver:v1.25.4
registry.k8s.io/kube-controller-manager:v1.25.4
registry.k8s.io/kube-scheduler:v1.25.4
registry.k8s.io/kube-proxy:v1.25.4
registry.k8s.io/pause:3.8
registry.k8s.io/etcd:3.5.5-0
registry.k8s.io/coredns/coredns:v1.9.3
Bare Metal 安装
注意,这一步会关闭防火墙、selinux 如果是无防火服务器请 留意。防火墙不是必须关闭的,但是需要给 k8s 预留。如果是局域网安装或使用安全组。此步骤可以快速复制粘贴执行。 此步骤全部节点执行
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭所有防火墙( 使用安全组)
systemctl stop firewalld
systemctl disable firewalld
# 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 系统优化
cat > /etc/sysctl.d/k8s_better.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
modprobe br_netfilter
lsmod |grep conntrack
modprobe ip_conntrack
sysctl -p /etc/sysctl.d/k8s_better.conf
# 系统依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset iproute-tc jq iptables curl sysstat libseccomp wget vim net-tools git
# bash 自补充 (阿里云自带,非托管机构自行加料)
# sudo yum -y install bash-completion
# source /etc/profile
# 时间同步,开机启动 (阿里云自带,非托管机自行加料)
# sudo ntpdate ntp1.aliyun.com
# sudo systemctl status ntpdate
# sudo systemctl start ntpdate
# sudo systemctl status ntpdate
# sudo systemctl enable ntpdate
# 关闭 selinux
getenforce
cat /etc/selinux/config
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config
# 开启ipvs 转发
modprobe br_netfilter
cat <<EOF >/etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack
# 确保每台机器的uuid不一致,如果是克隆机器,修改网卡配置文件删除uuid那一行
# cat /sys/class/dmi/id/product_uuid
添加 阿里云镜像仓库
这里使用了阿里云节点,国内外均可使用,若在国外机房可以使用k8s源。 此步骤全部节点执行
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# 是否开启本仓库
enabled=1
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装 Containerd
Kubernetes 1.25.0 起取消对 Docker 直接兼容,现用 Containerd 替代。这也是旧版本与 1.25.x 最大差别。 此步骤全部节点执行
cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 获取阿里云YUM源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 下载安装
yum install -y containerd.io